package chapter11;

import redis.clients.jedis.Jedis;

/**
 * LuaWithError 类用于演示在 Redis 中使用 Lua 脚本时的错误处理
 * 该类通过 Jedis 客户端与 Redis 进行交互，并尝试执行一个包含错误的 Lua 脚本
 */
public class LuaWithError {
    /**
     * 主函数执行一个包含错误的 Lua 脚本
     * 该脚本试图在 Redis 中设置三个键值对，其中一个操作故意省略了值参数以引发错误
     *
     * @param args 命令行参数，未使用
     */
    public static void main(String[] args) {
        // 创建 Jedis 实例，连接到本地 Redis 服务器
        Jedis jedis = new Jedis("localhost");
        // 定义一个包含错误的 Lua 脚本，故意在第二个 set 操作中省略了值参数
        // 经实验，redis.call()命令一旦发生错误，就会导致整个脚本的停止，已经执行的命令不会回滚。redis.pcall()命令执行报错时，会继续执行。
        String script = "redis.call('set','Name','Farb');redis.call('set','Error');redis.call('set','Next','Next');";
        //String script = "redis.pcall('set','Name','Farb');redis.pcall('set','Error');redis.pcall('set','Next','Next');";
        // 执行 Lua 脚本并打印结果，预期会遇到错误
        System.out.println(jedis.eval(script, 0));
    }
}
